package com.kun.companion.core.ui.list;

import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.css.PseudoClass;
import javafx.scene.Node;
import javafx.scene.control.ContentDisplay;
import javafx.scene.control.ListCell;

/**
 * 基础列表单元格（完整实现）
 */
public class BaseListCell<T> extends ListCell<T> {
    protected static final PseudoClass HOVER_PSEUDO_CLASS = PseudoClass.getPseudoClass("hover");
    protected static final PseudoClass SELECTED_PSEUDO_CLASS = PseudoClass.getPseudoClass("selected");

    protected BooleanProperty hoverProperty = new SimpleBooleanProperty();
    protected boolean isStyleInitialized = false;
    protected Node cachedGraphic;

    @Override
    protected void updateItem(T item, boolean empty) {
        super.updateItem(item, empty);

        // 阶段1：状态重置
        resetCellState();

        if (empty || item == null) {
            // 阶段2：处理空项
            handleEmptyItem();
        } else {
//            setAccessibleRole(AccessibleRole.LIST_ITEM);
//            setAccessibleText(item.toString());
            // 阶段3：初始化样式
            if (!isStyleInitialized) {
                initStyle();
                isStyleInitialized = true;
            }

            // 阶段4：数据绑定
            bindData(item);

            // 阶段5：布局更新
            updateLayout();
        }

        // 阶段6：缓存管理
        manageGraphicCache();
    }

    /**
     * 初始化单元格样式（模板方法）
     */
    protected void initStyle() {
        // 基础样式类
        getStyleClass().add("kun-list-cell");
//        getStylesheets().add("data:text/css;charset=UTF-8," + DEFAULT_STYLE);
        getStylesheets().add("/com/kun/companion/css/kun-list-cell.css");
        // 悬停状态绑定
        hoverProperty.bind(hoverProperty());
        hoverProperty.addListener((obs, oldVal, newVal) ->
                pseudoClassStateChanged(HOVER_PSEUDO_CLASS, newVal));
    }

    /**
     * 数据绑定方法（需子类实现）
     *
     * @param item 数据项
     */
    protected void bindData(T item) {
        // 示例实现：显示对象的字符串表示
        setText(item.toString());

        // 使用缓存图形（示例）
        if (cachedGraphic == null) {
            cachedGraphic = createDefaultGraphic();
        }
        setGraphic(cachedGraphic);
    }

    /**
     * 更新布局（可被子类重写）
     */
    protected void updateLayout() {
        // 默认布局逻辑
        setContentDisplay(ContentDisplay.LEFT);
    }

    /**
     * 重置单元格状态
     */
    private void resetCellState() {
        setText(null);
        setGraphic(null);
        clearItemBindings();
        // 单元格宽度等于listview宽度
//        setMaxWidth(getListView().getMaxWidth());
//        setPrefWidth(getListView().getPrefWidth());
    }

    /**
     * 清理数据绑定
     */
    private void clearItemBindings() {
        // 清理现有绑定
        if (textProperty().isBound()) {
            textProperty().unbind();
        }
        // 移除样式类
        getStyleClass().removeAll("selected-item", "highlighted-item");
    }

    /**
     * 处理空项状态
     */
    private void handleEmptyItem() {
//        setDisable(true);
//        setStyle("-fx-opacity: 0.6;");
    }

    /**
     * 图形缓存管理
     */
    private void manageGraphicCache() {
        if (getGraphic() != null && getGraphic() != cachedGraphic) {
            cachedGraphic = getGraphic();
        }
    }

    /**
     * 创建默认图形节点（示例实现）
     */
    private Node createDefaultGraphic() {
        // 这里可以替换为实际需要的图形
        return new javafx.scene.shape.Circle(5, javafx.scene.paint.Color.LIGHTGRAY);
    }

    @Override
    public void updateSelected(boolean selected) {
        super.updateSelected(selected);
        pseudoClassStateChanged(SELECTED_PSEUDO_CLASS, selected);
    }

    // 在BaseListCell中添加
    @Override
    public void startEdit() {
        super.startEdit();
        onEditStart();
    }

    @Override
    public void cancelEdit() {
        super.cancelEdit();
        onEditCancel();
    }

    protected void onEditStart() { /* 可被子类覆盖 */ }

    protected void onEditCancel() { /* 可被子类覆盖 */ }


    private static final String DEFAULT_STYLE = """
                /* 基础单元格样式 */
                .kun-list-cell {
                    -fx-background-color: #FFFFFF;
                    -fx-border-color: transparent transparent #F0F0F0 transparent;
                    -fx-border-width: 0 0 1px 0;
                    -fx-padding: 8px 12px;
                }
                
                /* 悬停效果 */
                .kun-list-cell:hover {
                    -fx-background-color: #F8F9FA;
                }
                
                /* 选中状态 */
                .kun-list-cell:selected {
                    -fx-background-color: red;
                    -fx-border-color: #007BFF;
                }
                
                /* 空单元格样式 */
                .kun-list-cell:empty {
                    -fx-border-color: transparent;
                    -fx-background-color: transparent;
                }
                .kun-list-cell .kun-button {
                -fx-background-color: yellow;
                -fx
                }
            """;
}
